<?php
/**
 * 框架 - 配置处理类(由此进行统一的管理)
 * 
 * @version $Id: Config.php 209 2011-07-08 03:49:16Z linsir123 $
 */
class Config
{
	/**
	 * @var 配置文件所在目录
	 */
	public $dir;
	
	/**
	 * @var 数据是否保存在MC中
	 */
	public $mc;
	
	/**
	 * @var 配置数据
	 */
	private $_data = array();
	
	/**
	 * 构造函数
	 */
	public function __construct()
	{
		$this->mc = false;
		$this->dir = APP_DIR.'config/';
	}
	
	/**
	 * 设计配置文件所在目录
	 */
	public function setDir($dir)
	{
		$this->dir = $dir;
	}
	
	/**
	 * 设置框架核心配置
	 */
	public function setDeault($config, $key = 'main')
	{
		$this->_data[$key] = $config;
	}
	
	/**
	 * 返回程序某个配置项，建为字符串并以'.'分隔，第一部份为配置文件
	 * 
	 * @example $data = App::getConf->get('page.show')
	 */
	public function get($key)
	{
		if (empty($key)) 
			return null;
			
		///
		$keys = explode('.', $key);
		$f = array_shift($keys);
		
		///
		if (!isset($this->_data[$f])) {
			$readFile = true;
			if ($this->mc) {
				$mc = App::getMc();
				$mcKey = 'conf:'.$f;
				$this->_data[$f] = $mc->get($mcKey);
				$readFile = $this->_data[$f] === false;
			}
			
			if ($readFile) {
				$file = $f.'.php';
				$this->_data[$f] = App::import($file, $this->dir);
				if ($this->mc) 
					$mc->add($mcKey, $this->_data[$f]);
			}
		}
		
		$exists = true;
		$conf = $this->_data[$f];
		foreach ($keys as $key) {
			if (is_array($conf) && isset($conf[$key])) 
				$conf = $conf[$key];
			else {
				$exists = false;
				break;
			}
		}
		
		return $exists ? $conf : null;
	}
}
